package org.web.demo.servlet;

import lombok.extern.slf4j.Slf4j;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author yexi
 */
@WebServlet("/list")
@Slf4j
public class ListServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 获取浏览器带过来的 Cookie 数据
        Cookie[] cookies = req.getCookies();
        log.info("目前浏览器所有的Cookie信息: " + Arrays.stream(cookies).collect(Collectors.toMap(Cookie::getName, Cookie::getValue)));
        for (Cookie cookie : cookies) {
            if ("username".equals(cookie.getName())) {
                //此时可对cookie进行属性修改操作
                //方式一：修改 Cookie 中的数据
                cookie.setValue("human");
                // 设置 Cookie 存活时间，单位秒
                cookie.setMaxAge(60);
                // 设置为0表示存活时间为0秒。效果等同于删除 Cookie
                cookie.setMaxAge(0);

                //方式二：创建新的 Cookie 对象
                cookie = new Cookie("username", "nonhuman");
                // 使用 Response 对象把 Cookie 写回浏览器
                resp.addCookie(cookie);
                // 设置为-1则代表该 Cookie 是一个会话 Cookie，浏览器关闭则销毁(获得与Session同等的存活时间)
                cookie.setMaxAge(-1);
                resp.addCookie(cookie);
                break;
            }
        }

        // 获取服务器中的 session 数据
        HttpSession session = req.getSession();
        log.info("当前session的id: " + session.getId());
        Enumeration<String> attributeNames = session.getAttributeNames();
        while (attributeNames.hasMoreElements()) {
            String attributeName = attributeNames.nextElement();
            log.info("session属性名称: " + attributeName + " 属性对应值为: " + session.getAttribute(attributeName));
            if ("USERNAME_IN_SESSION".equals(attributeName)) {
                session.setAttribute("USERNAME_IN_SESSION", "human");
            }
        }

        // 调用业务方法来处理请求，从数据库中查询该用户的邮件列表(模拟)
        List<String> list = Arrays.asList("邮件1", "邮件2", "邮件3");
        req.setAttribute("list", list);
        req.getRequestDispatcher("/WEB-INF/views/list.jsp").include(req, resp);
    }
}